package back.Java代理.动态代理.jdk动态代理.案例1;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class ProxyUtil {
    public static Star createProxy(BigStar bigStar) {
        /*
         * newProxyInstance(ClassLoader loader,
         * Class<?>[] interfaces,
         * InvocationHandler h)
         * 参数1: 用于指定一个类加载器
         * 参数2: 指定生成的代理长什么样子，也就是有哪些方法
         * 参数3: 用来指定生成的代理对象要干什么事情
         */
        Star starProxy = (Star) Proxy.newProxyInstance(ProxyUtil.class.getClassLoader(),
                new Class[] { Star.class }, new InvocationHandler() {
                    @Override
                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                        // 代理对象要做的事情，会在这里写代码
                        if ("sing".equals(method.getName())) {
                            System.out.println("准备场地和话筒，收费20万元");
                            // 调用目标对象的方法
                        } else if ("dance".equals(method.getName())) {
                            System.out.println("准备舞台和灯光，收费10万元");
                        }
                        return method.invoke(bigStar, args);
                    }
                });
        return starProxy;
    }
}